package com.powerbank.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 优惠券模板实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("coupon_template")
public class CouponTemplate {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 优惠券模板编码
     */
    @TableField("template_code")
    private String templateCode;

    /**
     * 优惠券名称
     */
    @TableField("coupon_name")
    private String couponName;

    /**
     * 优惠券类型：DISCOUNT-满减券，RATE-折扣券，CASH-代金券
     */
    @TableField("coupon_type")
    private String couponType;

    /**
     * 优惠券金额（满减券的减免金额、代金券面额）
     */
    @TableField("coupon_amount")
    private BigDecimal couponAmount;

    /**
     * 折扣率（折扣券使用，如0.8表示8折）
     */
    @TableField("discount_rate")
    private BigDecimal discountRate;

    /**
     * 使用门槛（满多少可用）
     */
    @TableField("min_amount")
    private BigDecimal minAmount;

    /**
     * 最大优惠金额（折扣券的封顶金额）
     */
    @TableField("max_discount")
    private BigDecimal maxDiscount;

    /**
     * 适用范围：ALL-全部，DEPOSIT-押金，FEE-费用
     */
    @TableField("apply_scope")
    private String applyScope;

    /**
     * 发放总数
     */
    @TableField("total_count")
    private Integer totalCount;

    /**
     * 已发放数量
     */
    @TableField("issued_count")
    private Integer issuedCount;

    /**
     * 已使用数量
     */
    @TableField("used_count")
    private Integer usedCount;

    /**
     * 每人限领数量
     */
    @TableField("limit_per_user")
    private Integer limitPerUser;

    /**
     * 有效期类型：FIXED-固定时间，RELATIVE-相对时间
     */
    @TableField("validity_type")
    private String validityType;

    /**
     * 有效期开始时间（固定时间类型）
     */
    @TableField("valid_start_time")
    private LocalDateTime validStartTime;

    /**
     * 有效期结束时间（固定时间类型）
     */
    @TableField("valid_end_time")
    private LocalDateTime validEndTime;

    /**
     * 相对有效期天数（相对时间类型）
     */
    @TableField("valid_days")
    private Integer validDays;

    /**
     * 发放方式：MANUAL-手动发放，AUTO-自动发放，ACTIVITY-活动发放
     */
    @TableField("issue_method")
    private String issueMethod;

    /**
     * 模板状态：0-禁用，1-启用
     */
    @TableField("template_status")
    private Integer templateStatus;

    /**
     * 描述
     */
    @TableField("description")
    private String description;

    /**
     * 使用说明
     */
    @TableField("usage_rules")
    private String usageRules;

    /**
     * 创建时间
     */
    @TableField(value = "created_time", fill = FieldFill.INSERT)
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedTime;

    /**
     * 是否删除：0-否，1-是
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}